﻿using Microsoft.Xna.Framework;
using FarseerPhysics.Dynamics;
using FarseerPhysics.Collision;
using FarseerPhysics.Factories;

namespace JumpAndRun.Factory
{
	public class PhysicsFactory
	{
		// Function World CreateWorld()
		//
		// Beschreibung:
		// Erzeugt ein World Object mit der Gravitation Vector2(0, 9.81)
		public static World CreateWorld()
		{
			return new World(new Vector2(0f, 9.81f));
		}

		// Function World CreateWorld(...)
		//
		// Param:
		// gravity - Gravitationvector 
		public static World CreateWorld(Vector2 gravity)
		{
			return new World(gravity);
		}

		// Function Body CreateRectangle(...)
		//
		// Param:
		// world - World object in der das Objekt erzeugt werden soll
		// type - Die Art mit der der Körper behandelt wird
		//		- BodyType.Static - Reagiert auf keinerlei Kräfte, unbeweglich
		//		- BodyType.Dynamic - Reagiert auf Kräfte, beweglich
		//		- BodyType.Kinematic - Unbekannt
		// width - Die Breite des Recheckts in Pixeln
		// height - Die Höhe des Rechtecks in Pixeln
		// density - Die Dichte des Objekts. Umso dichter umso schwerer.
		public static Body CreateRectangle(World world, BodyType type, int width, int height, float density)
		{
			Body b = BodyFactory.CreateRectangle(world, ConvertUnits.ToSimUnits(width), ConvertUnits.ToSimUnits(height), density);
			b.BodyType = type;
			b.SleepingAllowed = true;

			return b;
		}

		// Function Body CreateCircle(...)
		//
		// Param:
		// world - World object in der das Objekt erzeugt werden soll
		// type - Die Art mit der der Körper behandelt wird
		//		- BodyType.Static - Reagiert auf keinerlei Kräfte, unbeweglich
		//		- BodyType.Dynamic - Reagiert auf Kräfte, beweglich
		//		- BodyType.Kinematic - Unbekannt
		// radius - Der Radius des Kreises in Pixeln
		// density - Die Dichte des Objekts. Umso dichter umso schwerer.
		public static Body CreateCircle(World world, BodyType type, int radius, float density)
		{
			Body b = BodyFactory.CreateCircle(world, ConvertUnits.ToSimUnits(radius), density);
			b.BodyType = type;
			b.SleepingAllowed = true;

			return b;
		}
	}
}
